import * as vscode from 'vscode';

import * as Path from 'path';

import * as Fs from 'fs';
import { log } from 'console';

const pluginName = 'hello-plugin';

export default function (context: vscode.ExtensionContext) {
  return [
    // 打开webview
    // vscode.commands.registerCommand('hello.openWebview1', function (uri) {
    //   // 1.创建并显示Webview
    //   const panel = vscode.window.createWebviewPanel(
    //     'testWebview', // 该webview的标识，任意字符串
    //     "WebView演示", // webview面板的标题，会展示给用户
    //     vscode.ViewColumn.One, // webview面板所在的分栏,显示在编辑器的哪个部位
    //     {
    //       enableScripts: true, // 启用JS，默认禁用
    //       // retainContextWhenHidden: true, // webview被隐藏时保持状态，避免被重置
    //     }
    //   );
    //   /***  读取图片得到相对路径到html模板 start ***/
    //   // 获取磁盘上的资源路径,context.extensionPath可以理解成是获取当前项目的跟目录，所以Path.join(context.extensionPath, '/images', 'chrome.png')，就是找出本项目下imagesW文件里的chrome.png图片。并且拼出一个相对路径
    //   const onDiskPath = vscode.Uri.file(
    //     // Path.join(context.extensionPath, 'src/assets/images', 'chrome.png')
    //     Path.join(context.extensionPath, '/images', 'chrome.png')
    //   );
    //   // 得到路径 
    //   const catGifSrc = panel.webview.asWebviewUri(onDiskPath);

    //   // 页面输出的内容
    //   panel.webview.html = genWebview(catGifSrc);
    //   /***  读取图片得到相对路径到html模板 end ***/

    //   // 接收消息
    //   panel.webview.onDidReceiveMessage(message => {
    //     console.log('插件收到的消息：', message);
    //     // vscode.window.showErrorMessage(message.text);

    //     if (message.cmd) {
    //       // cmd表示要执行的方法名称
    //       messageHandler.command(message.cmd, message);
    //     } else {
    //       messageHandler.log(`未找到名为 ${message.cmd} 的方法!`);
    //     }

    //   }, undefined, context.subscriptions);
    // }),
    // 打开webview
    vscode.commands.registerCommand('hello.openWebview', function (uri) {
      // 1.创建并显示Webview
      const panel = vscode.window.createWebviewPanel(
        'testWebview', // 该webview的标识，任意字符串
        "WebView演示", // webview面板的标题，会展示给用户
        vscode.ViewColumn.One, // webview面板所在的分栏,显示在编辑器的哪个部位
        {
          enableScripts: true, // 启用JS，默认禁用
          // retainContextWhenHidden: true, // webview被隐藏时保持状态，避免被重置
        }
      );
     // 读取html 
     const pathToHtml = vscode.Uri.file(
        Path.join(context.extensionPath, 'views', 'dstFormTool/index.html')
      );
      /******** 资源路径 start ******/
      const srcPathUri = vscode.Uri.file(Path.join(context.extensionPath, 'views', 'dstFormTool'));
      const baseUri = panel.webview.asWebviewUri(srcPathUri);
      // 出于安全考虑，Webview默认无法直接访问本地资源，它在一个孤立的上下文中运行，想要加载本地图片、js、css等必须通过特殊的vscode-resource:协议，网页里面所有的静态资源都要转换成这种格式，否则无法被正常加载。
      // vscode-resource:协议类似于file:协议，但它只允许访问特定的本地文件。和file:一样，vscode-resource:从磁盘加载绝对路径的资源。
      const pathUri = pathToHtml.with({ scheme: 'vscode-resource' });
      var indexHtml = Fs.readFileSync(pathUri.fsPath, 'utf8');
      console.log(baseUri, 111111333);
      indexHtml = indexHtml.replace('<base href="/">', `<base href="${String(baseUri)}/">`);
      panel.webview.html = indexHtml;
      /***  读取图片得到相对路径到html模板 end ***/

      // 接收消息
      panel.webview.onDidReceiveMessage(message => {
        console.log('插件收到的消息：', message);
        // vscode.window.showErrorMessage(message.text);

        if (message.cmd) {
          // cmd表示要执行的方法名称
          messageHandler.command(message.cmd, message);
        } else {
          messageHandler.log(`未找到名为 ${message.cmd} 的方法!`);
        }

      }, undefined, context.subscriptions);
    }),
    vscode.commands.registerCommand('hello.webFormGen', function (uri) {
      // 创建webview
      const panel = vscode.window.createWebviewPanel(
        'form', // viewType
        "表单页2222", // 视图标题
        vscode.ViewColumn.One, // 显示在编辑器的哪个部位
        {
          enableScripts: true, // 启用JS，默认禁用
          retainContextWhenHidden: true, // webview被隐藏时保持状态，避免被重置
        }
      );

      // 读取html 
      const pathToHtml = vscode.Uri.file(
        Path.join(context.extensionPath, 'views', 'formGen/index.html')
      );
      console.log(111111333);
      console.log(pathToHtml);
      /******** 资源路径 start ******/
      const srcPathUri = vscode.Uri.file(Path.join(context.extensionPath, 'views', 'formGen'));
      const baseUri = panel.webview.asWebviewUri(srcPathUri);
      // 出于安全考虑，Webview默认无法直接访问本地资源，它在一个孤立的上下文中运行，想要加载本地图片、js、css等必须通过特殊的vscode-resource:协议，网页里面所有的静态资源都要转换成这种格式，否则无法被正常加载。
      // vscode-resource:协议类似于file:协议，但它只允许访问特定的本地文件。和file:一样，vscode-resource:从磁盘加载绝对路径的资源。
      const pathUri = pathToHtml.with({ scheme: 'vscode-resource' });
      var indexHtml = Fs.readFileSync(pathUri.fsPath, 'utf8');
      indexHtml = indexHtml.replace('<base href="/">', `<base href="${String(baseUri)}/">`);
      panel.webview.html = indexHtml;
      /******** 资源路径 end ******/



      // 接收消息
      panel.webview.onDidReceiveMessage(message => {
        console.log('插件收到的消息：', message);
        if (message.cmd) {
          // cmd表示要执行的方法名称
          messageHandler.command(message.cmd, message);
        } else {
          messageHandler.log(`未找到名为 ${message.cmd} 的方法!`);
        }

      }, undefined, context.subscriptions);

    }),
    // 生成文件
    vscode.commands.registerCommand('hello.genFile', (params) => {
      console.log(params, 11111111);
      const { dir, fileName, content } = params;

      try {
        const rootPath = vscode.workspace.rootPath || '';
        const path = Path.join(rootPath, dir, fileName);
        Fs.writeFileSync(path, `${content}`);
        vscode.window.showInformationMessage(`生成成功111 ${path}`);
      } catch (e) {
        console.log(e);
        vscode.window.showInformationMessage(`生成失败 ${e}`);
      }
    }),


    vscode.commands.registerCommand("helloPlugin-tools.openChild", args => {
      vscode.window.showInformationMessage(args);
    })
  ];
}

const messageHandler = {
  command(commandName: string, message: any) {
    vscode.commands.executeCommand(`hello.${commandName}`, message.params);
    // 'hello.helloWorld';
  },
  log(msg: string) {
    vscode.window.showInformationMessage(`${msg} !`);
  }
};


function genWebview(catGifSrc: vscode.Uri) {

  return `<!DOCTYPE html>
    <html>
      <body>
        你好，我是Webview1111
        <img src="${catGifSrc}" />
      </body>
    </html>`;
}